package practica1.ui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import practica1.controller.Controller;
import practica1.img.Imagenes;
import practica1.logic.LogicExperimento;
import practica1.logic.LogicPoblacion;

/**
 * Clase que extiende de DefaultTreeCellRenderer y personaliza como se
 * visualiza el jtree
 * @author Miguel González - Ceura
 */
 public class TreeCellRendererComponent extends DefaultTreeCellRenderer {    
     /**
      * Devuelve el componente que representa un nodo del JTree
      * @param tree JTree que llama a renderizar
      * @param value Valor a renderizar
      * @param selected Si el nodo está seleccionado
      * @param expanded Si el nodo está expandido
      * @param leaf Si es una hoja
      * @param row Fila donde se encuentra
      * @param hasFocus Si tiene el foco
      * @return Componente que representa el nodo
      */
    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, 
            boolean selected, boolean expanded, boolean leaf, int row,
            boolean hasFocus) {
        
        super.getTreeCellRendererComponent(
                        tree, value, selected,
                        expanded, leaf, row,
                        hasFocus);
        
        Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
        
        if(userObject instanceof String) {
            setIcon(new ImageIcon(Imagenes.getImagen("experimentos.gif").
                    getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
        }

        if(userObject instanceof LogicExperimento) {
            if(((LogicExperimento)userObject).isGuardadoBD()) {
                setIcon(new ImageIcon(Imagenes.getImagen("experimentoBD.gif").
                        getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
            } else {
                setIcon(new ImageIcon(Imagenes.getImagen("experimento.gif").
                        getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
            }
            
            LogicExperimento exPrin = Controller.getInstance().
                    getExperimentoPrincipal();
            if(exPrin != null) {
                if(exPrin.equals(userObject)) {
                    //Ponemos en negrita
                    setText("<html><b>" + getText() + "</b></html>");
                }
            }
            
            if(((LogicExperimento)userObject).isModified()) {
                setForeground(Color.RED);
            } else {
                setForeground(Color.BLACK);
            }
        }

        if(userObject instanceof LogicPoblacion) {
            setIcon(new ImageIcon(Imagenes.getImagen("poblacion.gif").
                    getScaledInstance(24, 24, Image.SCALE_DEFAULT)));
            LogicPoblacion pob = (LogicPoblacion) userObject;
            if(pob.isModified()) {
                setForeground(Color.RED);
            } else {
                setForeground(Color.BLACK);
            }
        }

        return this;
    }
}
